#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;

struct Node
{
    int l, r, d;
    Node( ) { } 
    Node ( int _l, int _r, int _d )
        : l( _l ), r( _r ), d( _d ) { }
};

char s[ 50001 ];
int n, m, pos;
Node h[ 200000 ];

int query( int p, int l, int r )
{
    int t;
    //printf("%d %d %d %d %d\n", p, l, r, h[ p ].l, h[ p ].r);
    if ( l < h[ p ].l ) l = h[ p ].l;
    if ( r > h[ p ].r ) r = h[ p ].r;
    if ( l == h[ p ].l && r == h[ p ].r ) return h[ p ].d;
    if ( l > h[ p ].r || r < h[ p ].l ) return 0;
    t = query( p * 2, l, r ) + query( p * 2 + 1, l, r );
    if ( l <= h[ p * 2 ].r && r >= h[ p * 2 + 1 ].l )
    {
        if ( r >= h[ p * 2 + 1 ].l + 1 && h[ p * 2 + 1 ].l + 1 <= h[ p * 2 + 1 ].r )
            if ( s[ h[ p * 2 ].r ] == 'w' && s[ h[ p * 2 ].r + 1 ] == 'b' && s[ h[ p * 2 ].r + 2 ] == 'w' )
                t++;
        if ( l <= h[ p * 2 ].r - 1 && h[ p * 2 ].r - 1 >= h[ p * 2 ].l )
            if ( s[ h[ p * 2 ].r - 1 ] == 'w' && s[ h[ p * 2 ].r ] == 'b' && s[ h[ p * 2 ].r + 1 ] == 'w' )
                t++;
    }
    return t;
}

void update( int p, int l, int r, int c )
{
    if ( l < h[ p ].l || r > h[ p ].r ) return ;
    h[ p ].d += c;
    if ( p < pos )
    {
        update( p * 2, l, r, c );
        update( p * 2 + 1, l, r, c );
    }
}

void change( int p, char c )
{
    if ( s[ p ] == c )
        return ;
    if ( s[ p ] == 'w' )
    {
        if ( p - 2 >= 0 )
            if ( s[ p - 2 ] == 'w' && s[ p - 1 ] == 'b' )
                update( 1, p - 2, p, -1 );
        if ( p + 2 < n )
            if ( s[ p + 1 ] == 'b' && s[ p + 2 ] == 'w' )
                update( 1, p, p + 2, -1 );
    }
    if ( s[ p ] == 'b' )
    {
        if ( p - 1 >= 0 && p + 1 < n )
            if ( s[ p - 1 ] == 'w' && s[ p + 1 ] == 'w' )
                update( 1, p - 1, p + 1, -1 );
    }
    s[ p ] = c;
    if ( s[ p ] == 'w' )
    {
        if ( p - 2 >= 0 )
            if ( s[ p - 2 ] == 'w' && s[ p - 1 ] == 'b' )
                update( 1, p - 2, p, 1 );
        if ( p + 2 < n )
            if ( s[ p + 1 ] == 'b' && s[ p + 2 ] == 'w' )
                update( 1, p, p + 2, 1 );
    }
    if ( s[ p ] == 'b' )
    {
        if ( p - 1 >= 0 && p + 1 < n )
            if ( s[ p - 1 ] == 'w' && s[ p + 1 ] == 'w' )
                update( 1, p - 1, p + 1, 1 );
    }
}

void init( )
{
    int i;
    scanf("%d%d%s", &n, &m, s);
    pos = 1;
    while ( pos < n ) pos <<= 1;
    for ( i = pos; i < pos * 2; i++ )
        h[ i ] = Node( i - pos, i - pos, 0 );
    for ( i = pos - 1; i >= 1; i-- )
        h[ i ] = Node( h[ i * 2 ].l, h[ i * 2 + 1 ].r, 0 );
    for ( i = 2; i < n; i++ )
        if ( s[ i - 2 ] == 'w' && s[ i - 1 ] == 'b' && s[ i ] == 'w' )
            update( 1, i - 2, i, 1 );
}

void work( )
{
    int cmd, x, y;
    char t[ 2 ];
    while ( m-- )
    {
        scanf("%d", &cmd);
        if ( cmd == 0 )
        {
            scanf("%d%d", &x, &y);
            printf("%d\n", query( 1, x, y ));
        }
        else
        {
            scanf("%d%s", &x, t);
            change( x, t[ 0 ] );
        }
    }
}

int main( )
{
    int t, cas = 1;
    scanf("%d", &t);
    while ( t-- )
    {
        init( );
        printf("Case %d:\n", cas++);
        work( );
    }
    return 0;
}
